procedure insert( key : typekey; var r : dataarray );
label 999;
var i, ii, inc, init, j, jj : integer;
begin
init := hashfunction( key );
inc := increment( key );
for i:=0 to n do
for j:=i downto 0 do begin
jj := (init + inc*j) mod m;
ii := (jj + increment(r[jj].k) * (i-j)) mod m;
if empty(r[ii]) or deleted(r[ii]) then begin
{*** move record forward ***}
r[ii] := r[jj];
{*** insert new in r[jj] ***}
r[jj].k := key;
n := n+1;
goto 999 {*** return ***}
end
end;
Error {*** table full ***};
999:
end;
|